package com.teach;

import java.io.File;
import java.io.FileFilter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

public class FileTest2 {


	public static void main(String[] args) throws Exception {
		File root = new File("d:\\upload");

		// 文件和文件夹的属性
		File file = new File(root,"a.txt");
	
		
		// 文件和文件夹的创建
		System.out.println("-----------文件和文件夹的创建---------");
		File f2 = new File(root,"目录03");
		System.out.println(f2.mkdir());
		
		File f3 = new File(root,"目录04/目录0401/");
		System.out.println(f3.mkdir());//只能创建单层次目录
		System.out.println(f3.mkdirs());
		
		//思考：如果要在文件系统下，唯一存放一个文件，不允许覆盖相同的文件，怎么办？
		//思路，生成一个唯一的文件夹
//		new File(root,UUID.randomUUID().toString()).mkdir();
//		new File(root,new SimpleDateFormat("yyyy/MM/dd/").format(new Date())+UUID.randomUUID().toString()).mkdirs();
		
		//創建文件
		File f4 = new File(root,"d.txt");
		f4.createNewFile();
		
		//創建臨時文件
		File f5 = File.createTempFile("aaa", ".bbb");
		System.out.println(f5.getAbsolutePath());
//		File f6 = File.createTempFile("abc", ".def", root);
//		System.out.println(f6);

		// 文件的文件夹的重命名
		System.out.println("------------文件的文件夹的重命名---------------");
//		File f7 = new File(root,"目录07");
//		System.out.println(f2.renameTo(f7));
//		File f8 = new File("d:\\目录08");//移动
//		System.out.println(f2.renameTo(f8));
//		File f8 = new File("c:\\目录08");//移动失败，要求：必须在同一个盘符
//		System.out.println(f2.renameTo(f8));
		
//		File f9 = new File(root,"b.txt");
//		System.out.println(f9.renameTo(new File("d:\\c.txt")));

		// 文件和文件夹的删除
		System.out.println("------------文件和文件夹的删除---------------");
//		file = new File(root,"b.txt");
//		System.out.println(file.delete());
//		file = new File(root,"d.txt");
//		file.deleteOnExit();
//		Thread.sleep(5000);//休眠5秒
		
		file = new File(root,"目录03");
		System.out.println(file.delete());
		
		file = new File(root,"目录04");
		System.out.println(file.delete());
		//如果要删除非空的目录“目录04”怎么办？
		

		// 子文件和子文件夹的获取
		System.out.println("----------子文件和子文件夹的获取-----------");

		File[] fs = root.listFiles();
		for(File f : fs){
			System.out.println(f.getName());
		}
		System.out.println("-----------------所有的盘符|卷");
		fs = File.listRoots();
		for(File f : fs){
			System.out.println(f);
		}
		System.out.println("-----------------");
		fs = root.listFiles(new FileFilter() {
			@Override
			public boolean accept(File pathname) {
				return pathname.isDirectory();
			}
		});
		for(File f : fs){
			System.out.println(f.getName());
		}
		System.out.println("-----------------");
		fs = root.listFiles((f)->f.isFile());
		for(File f : fs){
			System.out.println(f.getName());
		}
		System.out.println("---------------");
		print(root,"");
		
	}
	
	/**
	 * - 删除文件或[非空]目录
	 * @param file
	 */
	private static void rm(File file) {
		if(file.isFile()) {
			file.delete();
			return;
		}
		for(File f : file.listFiles((f)->f.isFile())){
			f.delete();
		}
		for(File f : file.listFiles((f)->f.isDirectory())){
			rm(file);
		}
		file.delete();
	}
	
	private static void print(File file,String pre){
		for(File f : file.listFiles((f)->f.isDirectory())){
			System.out.println(pre+f.getName());
			print(f,pre+"  ");
		}
		for(File f : file.listFiles((f)->f.isFile())){
			System.out.println(pre+f.getName());
		}
	}
}
